<?php
/**
 * clase_zen_FabricaClases.php
 * @author Juan Belon
 * @access public
 * @copyright LGPL, GPL
 * @package zen_POA
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @abstract Se trata de una clase que genera otras clases con SQL 
 *    a partir de los comandos que le pasa generar.php, se usa en zen_andamio
 * @see zen_andamio
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
class zen_Fabrica {
    /**
    * Para llevar el control de las columnas de una tabla
    * @var str
    */
    var $columnas_tabla;
    /**
    * @desc Donde irá el fichero de la clase
    * @var str
    */
    var $destino;
  /**
  * Constructor
  * @return zen_FabricaClases
  */
    function zen_FabricaClases(){}
        
    function anadirMetodo($nombre,$nombreTabla=null,$columnas=null){    
        $metodo = "";
        switch ($nombre){
            case 'crear':
             break;
            case 'actualizar':
             break;
            case 'borrar':
             break;
        }
        return $metodo;
    }
    /**
    * @desc Crea un fichero con la clase y lo escribe devolviendo el resultado
    * @param str $nombreClase
    * @param mixed $infoTabla
    * @param str $destino
    */
    function crearModelo($nombreTabla, $infoTabla,$destino){
    
        $nombreTabla[0] = strtoupper($nombreTabla[0]);
        if (!is_writable($destino)) {
            trigger_error(_("No se puede escribir en el directorio: ").$destino);
            return false;
        } 
        if (!is_writable($destino. DIRECTORY_SEPARATOR."modelos".DIRECTORY_SEPARATOR,E_USER_NOTICE)){
            trigger_error(_("No se puede escribir en el directorio: ").$destino. DIRECTORY_SEPARATOR."modelos",E_USER_NOTICE);
            return false;
        }
        if($fh = fopen($destino. DIRECTORY_SEPARATOR."modelos".DIRECTORY_SEPARATOR.$nombreTabla.".php", "w")){
            
            //Obtener los campos de la tabla:
            $this->columnas_tabla = $this->obtenerColumnas($infoTabla);
            
            //crear la sección de atributos
            $atributos = $this->anadirAtributos($this->columnas_tabla);
            
            //crear la seccion de metodos del controlador, ya que zen_modelo_datos trae los del modelo
            $crear      = $this->anadirMetodo('crear',$nombreTabla, $this->columnas_tabla);
            $borrar     = $this->anadirMetodo('borrar',$nombreTabla);
            $actualizar = $this->anadirMetodo('actualizar',$nombreTabla);
          
            //Pegar toda la información junta.
            $clase  = "<?php\n";
            $clase .= "/******************************************\n";
            $clase .= " *@author  <ESCRIBE TU NOMBRE>\n";
            $clase .= " *@abstract <ESCRIBE LA DESCRIPCION DE LA CLASE>\n";
            $clase .= " ******************************************/\n";
            $clase .= "class ".$nombreTabla." extends zen_modelo_datos { \n\n";
            $clase .= "    var \$padre; \n";
            $clase .= "    var \$db; \n";
            $clase .= $atributos."\n";
            $clase .= "    function ".$nombreTabla."(\$db){ \n";
            $clase .= "          \$this->db = \$db; \n";
            $clase .= "    }\n\n"; 
            $clase .= $crear;
            $clase .= $borrar;
            $clase .= $actualizar;
            $clase .= "}//fin clase ".$nombreTabla."\n";
            $clase .= "?>";
            
            
            //Escribir fichero
            if(fwrite($fh, $clase)){
                return true;
            }else{
                return false;
            }
            
        }else{
            return false;
        }
        
    }//Fin de creación de una nueva clase()
    
    
    //Poner las Columnas en un array
    function obtenerColumnas($infoTabla){
        $matriz = array();
        foreach($infoTabla as $tabla){
            array_push($matriz, $tabla['nombre']);
        }
        
        return $matriz;
    
    }
    //Colocar los atributos:
    function anadirAtributos($columnas_tabla){
        foreach($columnas_tabla as $columna){
         $clase .= "    var \$".$columna.";\n"; 
        }
        return $clase;
    }
    
        
}
?>